package cs3343.project.family;

import javax.swing.ImageIcon;
import javax.swing.JLabel;

public class MapController2 {
	
	private GameController gc;
	private int mapDimension;
	private int mapSize;
	public JLabel [] mapImg;
	
	public MapController2(GameController gc) {
		this.gc = gc;
	}
	
	public void setupMap(int noOfPlayers) {
		if (noOfPlayers <= 2) {
			mapDimension = 6;
		}
		else if (noOfPlayers > 2 && noOfPlayers <= 4) {
			mapDimension = 8;
		}
		else {
			mapDimension = 10;
		}
		
		mapSize = (mapDimension + 4) * 2 - 1;
		
		initMapAreas();
		buildMap();
	}
	
	private void initMapAreas() {
		mapImg = new JLabel[40];	    
	    for (int i = 0; i < 40; i++) {
	    	gc.getUiController().getGameFrame().mapAreas[i] = new MapArea(i, new ImageIcon(ConfigManager.IMAGE_PATH + "land.jpg"), 0, 0);
	    	mapImg[i] = new JLabel(gc.getUiController().getGameFrame().mapAreas[i].getImage());
	    }
	}
	
	private void buildMap() {
		//draw mapAreas
	    int x = 0; 
	    int y = 0;
	    int k = 0;
	    
	    //--->
	    for (int i = 0; i < mapDimension; i++) {
	    	int imgW = gc.getUiController().getGameFrame().mapAreas[k].getImage().getIconWidth();
	    	int imgH = gc.getUiController().getGameFrame().mapAreas[k].getImage().getIconHeight();
	    	
	    	mapImg[k].setBounds(i * imgW, y, imgW, imgH);
	    	gc.getUiController().getGameFrame().mapAreas[k].setX(i * imgW);
	    	gc.getUiController().getGameFrame().mapAreas[k].setY(y);
	    	gc.getUiController().getGameFrame().mapPanel.add(mapImg[k]);
			
			k++;
			x = i * imgW;
	    }
	    
	    
	    
	    //|
	    //|
	    //V
	    for (int i = 0; i < 5; i++) {
	    	int imgW = gc.getUiController().getGameFrame().mapAreas[k].getImage().getIconWidth();
	    	int imgH = gc.getUiController().getGameFrame().mapAreas[k].getImage().getIconHeight();
	    	
	    	mapImg[k].setBounds(x, imgH + i * imgH, imgW, imgH);
	    	gc.getUiController().getGameFrame().mapAreas[k].setX(x);
	    	gc.getUiController().getGameFrame().mapAreas[k].setY(imgH + i * imgH);
	    	gc.getUiController().getGameFrame().mapPanel.add(mapImg[k]);
			
			k++;
			y = imgH + i * imgH;
	    }
	    
	    //<---
	    for(int i = 0; i < mapDimension - 1; i++){
	    	int imgW = gc.getUiController().getGameFrame().mapAreas[k].getImage().getIconWidth();
	    	int imgH = gc.getUiController().getGameFrame().mapAreas[k].getImage().getIconHeight();
	    	
	    	mapImg[k].setBounds(x - imgW * i - imgW, y, imgW, imgH);
	    	gc.getUiController().getGameFrame().mapAreas[k].setX(x - imgW * i - imgW);
	    	gc.getUiController().getGameFrame().mapAreas[k].setY(y);
	    	gc.getUiController().getGameFrame().mapPanel.add(mapImg[k]);
			
			k++;
	    }
	    
	    //^
	    //|
	    for(int i = 0; i < 5; i++){
	    	int imgW = gc.getUiController().getGameFrame().mapAreas[k].getImage().getIconWidth();
	    	int imgH = gc.getUiController().getGameFrame().mapAreas[k].getImage().getIconHeight();
	    	
	    	mapImg[k].setBounds(0, y - imgH * i - imgH, imgW, imgH);
	    	gc.getUiController().getGameFrame().mapAreas[k].setX(0);
	    	gc.getUiController().getGameFrame().mapAreas[k].setY(y - imgH * i - imgH);
	    	gc.getUiController().getGameFrame().mapPanel.add(mapImg[k]);
			
			k++;
	    }
	    
	}

	public int getMapDimension() {
		return mapDimension;
	}

	public void setMapDimension(int mapDimension) {
		this.mapDimension = mapDimension;
	}

	public int getMapSize() {
		return mapSize;
	}

	public void setMapSize(int mapSize) {
		this.mapSize = mapSize;
	}
}
